package com.partagenote;

import java.util.*;
import java.io.*;
import java.text.*;

/**
 *
 * @author Anselmatus
 */
public abstract class Evenement {

    protected ArrayList<Personne> listeParticipants;
    protected String nomEvenement;
    protected double sommeDueTotale;
    protected double sommeDonneeTotale;
    protected double sommeDueMoyenne;
    protected double resteTotal;

    public Evenement(String nom) {
        listeParticipants = new ArrayList<Personne>();
        sommeDueTotale = 0;
        sommeDonneeTotale = 0;
        sommeDueMoyenne = 0;
        resteTotal = 0;
        nomEvenement = nom;
    }

    /**
     * 
     * @param repas
     * @return
     */
    public abstract double calculSommeTotale();

    /**
     * 
     * @param repas
     * @return
     */
    public double calculSommeDonnee(Evenement repas) {
        double calcSommeDonnee = 0;
        Object[] participantListe = repas.listeParticipants.toArray();
        for (Object participant : participantListe) {
            Personne persParticipant = (Personne) participant;
            calcSommeDonnee += persParticipant.getSommeDonnee();
        }
        return calcSommeDonnee;
    }



    /**
     *
     * @param repas
     * @return
     *//*
    public double calculSommeMoyenne(Evenement repas) {
        double calcSommeTot = calculSommeTotale(repas);
        double nombrePers = repas.listeParticipants.size();
        return (calcSommeTot / nombrePers);
    }
*/
    /**
     *
     * @param repas
     * @return
     */
    /*
    public double calculReste(Evenement repas) {
        try {
            if ((calculSommeDonnee(repas) - calculSommeTotale(repas)) < 0) {
                throw new Exception();
            }
            return (calculSommeDonnee(repas) - calculSommeTotale(repas));
        } catch (Exception err) {
            System.out.println("Vous n'avez pas donné assez au vendeur !");
            System.out.println("Vous lui devez encore " + (calculSommeDonnee(repas) - calculSommeTotale(repas)));
            return (calculSommeDonnee(repas) - calculSommeTotale(repas));
        }
    }


    */
    /*
    public static void redistributionReste(ArrayList<Evenement> event) {
    double verifReste = 0;
    Scanner scan = new Scanner(System.in);
    Object[] eventList = event.toArray();
    for (Object persList : eventList) {
    Evenement personne = (Evenement) persList;
    System.out.println("Reste obtenu par " + personne.getNom() + " :");
    verifReste = +scan.nextFloat();
    try {
    if (verifReste > calculReste(event)) {
    throw new Exception();
    }
    personne.setReste(scan.nextFloat());
    } catch (Exception err) {
    System.out.println("Le reste ne correspond pas");
    }
    }
    }
     */
    /**
     *
     * @param repas
     */
    public void listeMembreEvent(Evenement repas) {
        System.out.println("-_-_-_-_-_-_-_-_-_-\n");
        System.out.println(repas.nomEvenement);
        System.out.println("Coût total de l'événement : " + repas.sommeDueTotale);
        System.out.println("Somme donnée totale : " + repas.sommeDonneeTotale);
        System.out.println("Reste obtenu : " + repas.resteTotal);
        System.out.println("\nParticipants :");
        Object[] participantListe = repas.listeParticipants.toArray();
        for (Object participant : participantListe) {
            Personne persParticipant = (Personne) participant;
            System.out.print("\n----------");
            System.out.println(persParticipant);
        }
    }

    /**
     *
     * @param participant
     * @param compt
     * @param nbPers
     */
    public void ajoutMembre(int nbPers) {
        Personne pers;
        Scanner compt = new Scanner(System.in);

        for (int cpt = 1; cpt <= nbPers; cpt++) {
            System.out.println("Nom de la " + cpt + " personne :");
            compt.nextLine();
            String nomParticipant = compt.nextLine();
            System.out.println("Cout de ses achats :");
            double coutAchat = compt.nextDouble();
            System.out.println("Somme donnée :");
            double sommeDonnee = compt.nextDouble();

            pers = new Personne(nomParticipant, sommeDonnee, coutAchat);
            this.listeParticipants.add(pers);
        }
    }

    public abstract double calculSommeFactureTotale();

    public abstract void initMembre(int nbPers);
}
